/*
  题目描述
    在一个魔法森林中，有三种不同的树：
      苹果树有 3 个分支和 8 片叶子
      桔树有 2 个分支和 3 片叶子
      樱桃树有 1 个分支和 2 片叶子
    已知森林中一共有 (a) 个分支和 (b) 片叶子。最多可能有多少棵树？最少可能有多少棵树？
  输入描述
    一行，两个正整数。
  输出描述
    输出两行，第 1 行输出最多可能有的树的数量，第 2 行输出最少可能有的树的数量。
  样例 1
    输入
      10 21
    输出
      7
      7
  样例2
    输入
      100 210
    输出
      90
      42
  提示
    1 <= a, b <= 5000 数据保证有解
*/

#include <iostream>

using namespace std;

int main() {
    int a, b;
    int k;
    int a1 = 0;  // 满足条件的数的个数的最大值
    int a2 = 0;  // 满足条件的数的个数的最小值
    int x = 0;

    cin >> a >> b;

    // 注意: 这里的循环判定条件已经过优化, 优化后可以减少程序整体的运行时间!
    for (int i = 0; i <= a / 3; i++) {
        for (int j = 0; j <= a / 2; j++) {
            k = a - i * 3 - j * 2;
            if (k >= 0) {
                if (i * 3 + j * 2 + k * 1 == a && i * 8 + j * 3 + k * 2 == b) {
                    x++;
                    a1 = max(a1, i + j + k);
                    if (x == 1) { // 注意: 这一步还是有必要的! 第一次满足条件时需要为最小值赋值
                        a2 = i + j + k;
                    } else {
                        a2 = min(a2, i + j + k);
                    }
                }
            }
        }
    }
    cout << a1 << endl << a2;

    return 0;
}